package com.xy.core;

import com.xy.api.HelloRpc;

import java.util.List;

public class RpcBootstrap {

//    private static final Logger logger = Logger.getLogger(RpcBootstrap.class.getName());

    // RpcBootstrap是个单例，我们希望每个应用程序只有一个实例

    private static RpcBootstrap rpcBootstrap = new RpcBootstrap();

    private RpcBootstrap() {
        // 构造启动引导，是需要做一些初始化的事
    }

    public static RpcBootstrap getInstance() {
        return rpcBootstrap;
    }


    /**
     * 用来定义当前应用的名字
     * @param applicationName
     * @return
     */
    public RpcBootstrap application(String applicationName) {
        return this;
    }


    /**
     * 用来配置一个注册中心
     * @param registryConfig
     * @return
     */
    public RpcBootstrap registry(RegistryConfig registryConfig) {
        return this;
    }

    /**
     * 配置当前暴露的服务使用的协议
     * @param protocolConfig
     * @return
     */
    public RpcBootstrap protocol(ProtocolConfig protocolConfig) {
//        logger.log(Level.parse("序列化："), protocolConfig.toString());
//        System.out.println("序列化");
//        logger.log(Level.INFO, "我添加的日志，protocol config: {}", protocolConfig.toString());

//        if (log.isDebugEnabled()) {
//            log.debug("protocol config: {}", protocolConfig.toString());
//        }

        return this;
    }

    /**
     * 发布服务,将接口实现，注册到服务中心
     * @return
     */
    public RpcBootstrap publish(ServiceConfig<?> service) {
//        System.out.println("logger.log(Level.parse(\"服务 {} 被注册 publish service:\"), service.getInterface().getName());");
//        System.out.println("logger.log(Level.parse(\"服务 {} 被注册 publish service:\"), service.getInterface().getName());");
//        logger.log(Level.WARNING, "我添加的日志，服务 {} 被注册 publish service:", service.getInterface().getName());
        return this;
    }

    /**
     * 批量发布服务
     * @return services
     */
    public RpcBootstrap publish(List<?> services) {
        return this;
    }

    public void start() {

    }

    public RpcBootstrap reference(ReferenceConfig<HelloRpc> reference) {

        // 在这个方法里我们是否可以拿到相关的配置项-注册中心
        // 配置reference，将来调用get方法时，方便生成代理对象

        return this;
    }
}